package com.linkgie.galaxyframework.security;

import java.io.Serializable;

import com.linkgie.galaxyframework.organization.Organization;
import com.linkgie.galaxyframework.security.application.ApplicationFeatures;

/**
 * 已认证账户主体；
 * 
 * <p>
 * 
 * 表示经过登录认证后的账户信息；
 * 
 * @author huanghaiquan
 *
 */
public interface AccountPrincipal extends AccountIdentity, AccountOrganizationDetails, Serializable {

	/**
	 * 账号当前登录的组织机构的 URI；
	 * <p>
	 * 
	 * 当账号加入了多个组织机构时，需要登录时需要登录组织，以便获得该组织相关的授权；
	 * <p>
	 * 
	 * 如果账号没有加入组织，或者登录时未指定组织，则返回 null；
	 * <p>
	 * 
	 * 注：属性值对应于 {@link Organization#getId()} ；
	 * 
	 * @return
	 */
	String getLoginOrganizationId();

	/**
	 * 当前用户在默认模式下被授予的可访问功能特性；
	 * 
	 * @return
	 */
	ApplicationFeatures getGrantedFeatures();

	/**
	 * 获取安全邮箱；
	 * 
	 * @return
	 */
	String getSecureEmail();

	/**
	 * 账号注册时间；
	 * 
	 * @return
	 */
	long getRegistrationTime();

	/**
	 * 账号过期时间；
	 * 
	 * @return
	 */
	Long getExpirationTime();

	/**
	 * 头像ID；
	 */
	String getAvatarId();
}
